package com.huitone.smspfm.interfacz.mt;

import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ArrayBlockingQueue;

/**   
* @Title SeqFilterQueue.java 
* @Package com.huitone.smspfm.interfacz.core 
* @Description TODO(用一句话描述该文件做什么) 
* @author ybliang   
* @date 2017年8月28日 上午11:45:27 
* @version V1.0   
*/
public class SeqRepeatFilterQueue {

	private int maxSize = 100000;
	
	private ArrayBlockingQueue<String> seqs = new ArrayBlockingQueue<>(maxSize);
	private Set<String> set = new HashSet<>();
	
	public void add(String seq) {
		
		try {
			seqs.add(seq);
			set.add(seq);
		} catch (Exception e) {
			if (e instanceof IllegalStateException) {
				set.remove(seqs.poll());
				add(seq);
			}
		}
	}
	
	public synchronized boolean contains(String seq) {
		
		boolean result = true;
		
		if (!set.contains(seq)) {
			
			if (seqs.size() >= maxSize) {
				set.remove(seqs.poll());
			}
			
			add(seq);
			
			result = false;
		} 
		
		return result;
	}
}
